package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.rzcode.coinex.kernel.common.enums.AppealStateEnum;
import com.rzcode.coinex.kernel.common.enums.BooleanEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 申诉实体类，用于表示系统中的申诉信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "appeal")
public class Appeal {

    /**
     * 申诉的唯一标识符。
     */
    private Long id;

    /**
     * 关联的订单对象。
     */
    @ApiModelProperty(value = "关联的订单", required = true)
    private Order order;

    /**
     * 申诉创建的时间戳，自动设置。
     */
    @ApiModelProperty(value = "创建时间", example = "2023-01-01 12:00:00")
    private LocalDateTime createTime;

    /**
     * 申诉处理的时间。
     */
    @ApiModelProperty(value = "处理时间", example = "2023-01-02 14:30:00")
    private LocalDateTime dealWithTime;

    /**
     * 申诉备注，最多500个字符。
     */
    @ApiModelProperty(value = "备注", example = "申诉理由详细描述")
    private String remark;

    /**
     * 申诉发起者的ID。
     */
    @ApiModelProperty(value = "申诉发起者ID", required = true, example = "123456")
    private Long initiatorId;

    /**
     * 申诉关联者的ID。
     */
    @ApiModelProperty(value = "申诉关联者ID", required = true, example = "789012")
    private Long associateId;

    /**
     * 发起者是否胜诉。
     */
    @ApiModelProperty(value = "发起者是否胜诉", example = "true")
    private BooleanEnum isSuccess;

    /**
     * 申诉处理状态，默认为未处理。
     */
    @ApiModelProperty(value = "处理状态", example = "NOT_PROCESSED")
    private AppealStateEnum status = AppealStateEnum.NOT_PROCESSED;

    /**
     * 处理申诉的管理员。
     */
    @ApiModelProperty(value = "处理者", hidden = true)
    private Admin admin;
}
